"""
Hauptfenster des Spiels, in dem Szenen gerendert werden.

@author: Max
"""

import sys

import pygame

import Colors  # @UnresolvedImport
import MainMenu


class RenderScreen(object):
    def __init__(self, log, clock):
        self.iHeight = 0
        self.iWidth = 0
        self.iFullScreen = 0
        self.iMaxFPS = 0
        self.screen = 0    
        self.Log = log
        self.Clock = clock
        
        self.iStartTime = 0
        self.iEndTime = 0
        self.iTime = 0
        
        self.currentScene = 0
        self.currentLevel = 0
        
        self.bRunning = True
        
    def setupMainWindow(self, config):
        """
        Hier wird das Fenster initialisiert. Als Parameter wird die eingelesene .ini-Datei uebergeben und alle VIDEO-Optionen angewendet.
        @param config: .ini-Datei-Liste, die u.a. Video-Optionen enthaelt.
        """
        try:
            self.loadVideoConfigs(config) 
            self.screen = pygame.display
            self.screen.set_mode((self.iWidth, self.iHeight))
            if self.iFullScreen:
                self.Log.printToLog("MainWindow: Vollbildmodus wird aktiviert.")
                self.screen.set_mode((self.iWidth, self.iHeight), pygame.FULLSCREEN)
                
        except:
            self.Log.printToLog("MainWindow: Fehler beim Initialisieren des Hauptfensters.")
            sys.exit(0)
            return -1
            
        self.Log.printToLog("MainWindow: Hauptfenster erfolgreich erstellt.")
        
        self.currentScene = MainMenu.MainMenu((self.iWidth, self.iHeight), self.Log, self)
        return 0 
        
        
    def update(self):
        """
        Bei jedem Durchlauf der GameLoop wird das Fenster neu gezeichnet.
        Zusaetzlich werden die FPS beschraenkt, sowie der Titel aktualisiert.
        @param clock: Die spielinterne Uhr
        """
        self.iStartTime = pygame.time.get_ticks()
        self.Clock.tick(self.iMaxFPS)
        self.screen.set_caption("Kleines PyGame-RPG - FPS: %d" % self.Clock.get_fps())
        
        self.bRunning = self.currentScene.update(self.iTime)
        self.render()
        
        self.iEndTime = pygame.time.get_ticks()
        self.iTime = (self.iEndTime - self.iStartTime) / 1000.0
        return self.bRunning

        
    def loadVideoConfigs(self, config):
        """
        Durchsucht die .ini-Datei-Liste nach dem Stickwort "VIDEO" und wendet die Optionen an. 
        @param config: .ini-Datei-Liste
        """
        for cat in config.sections():
            if cat == "VIDEO":
                for elem in config.items(cat):
                    if elem[0] == "width":
                        self.iWidth = int(elem[1])
                    elif elem[0] == "height":
                        self.iHeight = int(elem[1])
                    elif elem[0] == "fullscreen":
                        self.iFullScreen = int(elem[1])
                    elif elem[0] == "max_fps":
                        self.iMaxFPS = int(elem[1])
                
    def render(self):
        self.screen.get_surface().fill((Colors.BLACK))     
        self.currentScene.render()
        
        self.screen.get_surface().blit(self.currentScene, (0, 0))
        pygame.display.flip()
